const httpRequest = require("@/common/httpRequest.js")
export default class WebSocket {
	constructor(url) {
		this.url = url;
		this._timeout = 10000;
		this._timeoutObj = null;
		this.instance = null;
		this.client_id = "";
		this.onOpen()
	}
	connect() { //连接websocket
		this.close()
		this.instance = uni.connectSocket({
			url: this.url,
			complete: () => {},
			success: (res) => {
				console.log(res, "聊天连接成功");
			}
		});
	}
	_start() {
		let _this = this;
		clearTimeout(this._timeoutObj);
		this._timeoutObj = null
		this._timeoutObj = setInterval(() => {
			uni.sendSocketMessage({
				// 心跳發送的信息应由前後端商量後决定
				data: "heartbeat",
				success(res) {
					// console.log("發送心跳成功",res)
				},
				fail(err) {
					console.log(err)
					_this._reset()
				}
			});
		}, this._timeout);
	}
	// 心跳重置
	_reset() {
		clearTimeout(this._timeoutObj);
		this._timeoutObj = null
		return this;
	}
	send(data) { //發送消息
		this.instance.send({
			data,
			success: () => {}
		});
	}
	close() {
		uni.closeSocket({
			complete: () => {},
			success: (res) => {
				console.log(res, "聊天断開鏈接");
			}
		});
	}

	onOpen(callback) {
		uni.onSocketOpen((res) => {
			callback && callback(res);
			this._reset()
			this._start()
		});
	}
	onMessage(callback) {
		uni.onSocketMessage((resp) => {
			let res = JSON.parse(resp.data)
			uni.$emit("onsocketmsg", "")
			callback && callback(resp);
			switch (res.type) {
				case 'init':
					// 初始化
					uni.setStorageSync("client_id", res.client_id)
					this.client_id = res.client_id;
					console.log("初始化成功", res.client_id)
					this.online('online');
					break;
				case 'cx': //撤回消息
					uni.$emit("chexiaomsg", res.data.friends_message_id)
					break;
				case 'groupcx': //群组撤回消息
					uni.$emit("chexiaogroupmsg", res.data.group_message_id)
					break;
				case 'onKeydown':
					// if (res.data.friends_id == im.last_chat_id) {
					// 	$('.layim-chat-status').html('对方正在輸入..');
					// 	window.clearTimeout(im.t1); //去掉定时器
					// 	im.t1 = window.setTimeout(function() {
					// 		$('.layim-chat-status').html('');
					// 	}, 2200); //2.2秒没有收到按键信號说明已經停止輸入
					// }
					break;

				case 'onLine':
					// if (res.data.status == 'online') {
					// 	//設置指定好友在线，即頭像取消置灰
					// 	im.layim.setFriendStatus(res.data.uid, 'online');
					// } else {
					// 	//設置指定好友在线，即頭像取消置灰
					// 	im.layim.setFriendStatus(res.data.uid, 'offline');
					// }
					break;

				case 'getMsgboxNum':
					// if (res.data.total > 0) {
					// 	im.layim.showNew('More', true); //标注“更多”新动態
					// 	if ($('.msgboxNum').parent().find('span').text()) {
					// 		$('.msgboxNum').parent().find('span').text('（' + res.data.total + '）');
					// 	} else {
					// 		$('.msgboxNum').parent().append('<span style="color: #f00;font-size: 14px;">（' +
					// 			res.data.total + '）</span>');
					// 	}
					// } else {
					// 	im.layim.showNew('More', false);
					// 	$('.msgboxNum').parent().find('span').remove();
					// }
					break;
				case 'chatMessage':
					// im.layim.getMessage(res.data); //單条聊天數据渲染
					// 来消息了播放音频
					// this.scanAudio()
					break;

				case 'getFriends':
					// //得到好友列表
					// console.log('收到更新好友數据');
					// var friend = im.layim.cache().friend;
					// for (let j = 0; j < friend.length; j++) {
					// 	if (friend[j].list) {
					// 		for (let i = 0; i < friend[j].list.length; i++) {
					// 			im.layim.removeList({
					// 				type: 'friend',
					// 				id: friend[j].list[i].id //好友或者群组ID
					// 			});
					// 		}
					// 	}
					// }
					// //添加好友到面板
					// if (res.data.length > 0) {
					// 	for (let i = 0; i < res.data.length; i++) {
					// 		im.layim.addList(res.data[i]);
					// 	}
					// }
					break;

				case 'getGroups':
					// //得到群组列表
					// console.log('收到更新群组數据');
					// var group = im.layim.cache().group;
					// for (let i = 0; i < group.length; i++) {
					// 	for (let j = 0; j < group.length; j++) {
					// 		im.layim.removeList({
					// 			type: 'group',
					// 			id: group[j].id
					// 		});
					// 	}
					// }

					// //添加群到面板
					// if (res.data.length > 0) {
					// 	for (let i = 0; i < res.data.length; i++) {
					// 		im.layim.addList(res.data[i]);
					// 	}
					// }
					break;

				case 'noticeMessage':
					// im.layim.getMessage(res.data); //系統消息數量
					break;

				default:
					break;
			}

		});
	}
	// scanAudio() {
	// 	var music = null
	// 	music = uni.createInnerAudioContext(); //创建播放器对象
	// 	music.sessionCategory = "ambient"
	// 	music.src = require("@/static/image/chat/messagePrompt.mp3");
	// 	music.play()
	// 	music.onEnded(() => {
	// 		music = null
	// 	})
	// }
	online(data) {
		httpRequest.request('/webim/Friends/onLine', 'POST', {
			status: data,
			client_id: this.client_id,
			user_id: uni.getStorageSync("user_id"),
			sendtype: 1
		}, false, false, true).then(res => {
		})
	}
	onError(callback) {
		uni.onSocketError((res) => {
			console.log("websocket關閉2");
			callback && callback(res);
		});
	}
	onClose(callback) {
		uni.onSocketClose((res) => {
			console.log("websocket關閉3");
			callback && callback(res);
		});
	}
}